package com.lintf.common.utils;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author lin tingfeng
 * @system Mac
 * @data 2024/11/6 17:34
 * @package_name com.lintf.common.utils
 * @project_name sharding-sphere
 * @desc
 */
public class PageMineUtils {

    /**
     * 执行分页查询并返回分页结果.
     *
     * @param pageNum  当前页码
     * @param pageSize 每页大小
     * @param mapper   MyBatis Mapper 接口
     * @param query    查询条件 (可以为 null)
     * @param <T>      实体类型
     * @return 分页结果
     */
    public static <T> Map<String, Object> executePaginationByPageHelper(int pageNum, int pageSize, BaseMapper<T> mapper, Wrapper<T> query) {
        // 开始分页
        Page<T> page = PageHelper.startPage(pageNum, pageSize);

        // 执行查询
        List<T> list = mapper.selectList(query);

        // 准备返回的结果
        Map<String, Object> result = new HashMap<>();
        result.put("total", page.getTotal());
        result.put("pages", page.getPages());
        result.put("pageNum", page.getPageNum());
        result.put("pageSize", page.getPageSize());
        result.put("list", list);
        return result;
    }

    /**
     * 执行分页查询并返回分页结果.
     *
     * @param pageNum  当前页码
     * @param pageSize 每页大小
     * @param mapper   MyBatis Mapper 接口
     * @param wrapper  条件构造器 (可以为 null)
     * @param <T>      实体类型
     * @return 分页结果
     */
    public static <T> Map<String, Object> executePaginationByMyBatisPlus(int pageNum, int pageSize, BaseMapper<T> mapper, Wrapper<T> wrapper) {
        // 创建分页对象
        com.baomidou.mybatisplus.extension.plugins.pagination.Page<T> page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(pageNum, pageSize);

        // 执行查询
        com.baomidou.mybatisplus.extension.plugins.pagination.Page<T> resultPage = mapper.selectPage(page, wrapper);

        // 准备返回的结果
        Map<String, Object> result = new HashMap<>();
        result.put("total", resultPage.getTotal());
        result.put("pages", resultPage.getPages());
        result.put("pageNum", resultPage.getCurrent());
        result.put("pageSize", resultPage.getSize());
        result.put("list", resultPage.getRecords());
        return result;
    }

}
